package comandaXM.utils;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/**
 * Valida que el text sigui numèric i limita el numero de caràcters (per defecte 10 caràcters)
 * @author xmarti
 */
public class ValidarText extends PlainDocument {
    private  int limit=10;    
    private  boolean numeric=false;
    private boolean decimal = false; 
    private  boolean upperCase=false;   
    public ValidarText(){
       super(); 
    }
    public ValidarText(int limit) {
        super();
        this.limit = limit;
    }   
    /**
     * Valida i limita el text 
     * @param limit , llargada de caracters 
     * @param numeric , en cas afirmatiu, valida que el caràter sigui numeric 
     */
    public ValidarText(int limit, boolean numeric){
        super();
        this.limit = limit;
        this.numeric=numeric;
    }
    public ValidarText(int limit, boolean numeric, boolean upperCase){
        super();
        this.limit = limit;
        this.numeric=numeric;
        this.upperCase=upperCase; 
    }
    public ValidarText (int limit, boolean numeric, boolean upperCase,boolean decimal){
        super();
        this.limit = limit;
        this.numeric=numeric;
        this.upperCase=upperCase; 
        this.decimal= decimal; 
    }
    /**
     * SobreEscriu el mètode insertString del PlainDocument
     * @param offset
     * @param str Caràcter o caràcters que rep.
     * @param attr
     * @throws BadLocationException 
     */
    @Override    
    public void insertString(int offset, String  str, AttributeSet attr)throws BadLocationException {
        char[] temp = str.toCharArray(); 
        char a;
        
        if ((getLength() + str.length()) > limit) return;
        if (str == null) return;
        if(decimal) {                        
            for (int i=0;i<temp.length;i++){                
                a= temp[i];
                if (temp[i]==','){
                    temp[i]='.';
                }else{                      
                    if (! Character.isDigit(a) &&a!='.'){
                        return;
                    }
                }                
            }             
            
        }else if (numeric) for (int i=0;i<str.length();i++) if (!Character.isDigit(str.charAt(i)))return;             
        str= new String (temp);
        if(upperCase) str= str.toUpperCase();
        super.insertString(offset, str, attr);      
    }
}
